Generador frecuencia cuadrada

Contenido

Generador de frecuencia cuadrada.

Usaremos el Timer1 para generar la frecuencia a traves del pin PB1(OC1A)

En este ejemplo generamos una frecuencia de 440Hz

Para calcular el OCR1A lo hacemos con:

(CPU_CLOCK / PREESCALER) / FRECUENCIA_FINAL / 2

En este caso seria (1000000 / 8) / 440 / 2, que nos da aproximadamente 142

(Cuando queremos generar frecuencias muy especificas es muy dificil que el calculo final sea 100% exacto, y para el comparador necesitamos un numero entero, por eso simplemente redondeamos y listo).

La división entre 2 al final es porque el timer hace un toggle del pin, por lo tanto para que haga la frecuencia completa tiene que activar y desactivar la salida por lo tanto para alcanzar la frecuencia que queremos tenemos que hacer que sea el doble de rapido, por eso se divide entre 2.

Circuito

Podemos usar la señal cuadrada generada para enviarla a un altavoz y así escucharla, en este caso a traves de PB1(OC1A).

El condensador conectado al altavoz actua como un acoplador, haciendo que el altavoz perciba el cambio de frecuencia de manera mas amortiguada, al usar el condensador la señal queda centrada en 0V.

Código
#include <avr/io.h>

void timer1_init() {
    TCCR1B |= (1 << WGM12); // Modo CTC
    TCCR1B |= (1 << CS11); // Prescaler 8
    TCCR1A |= (1 << COM1A0); // Pin toggle en PB1

    OCR1A = 142;
}

int main(void) {
    DDRB |= (1 << PB1); // PB1 como salida

    timer1_init();     // Inicializar Timer1

    while (1) {
    }
}
Tags

AVR | PWM | Generador | frecuencia